//package com.mi.rule.db.succinct.controller;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.mi.rule.db.core.MiDao;
//import com.mi.rule.db.core.MiPage;
//import com.mi.rule.db.core.MiWrapper;
//import com.mi.rule.db.succinct.entity.Demo;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.time.LocalDateTime;
//import java.util.*;
//
///**
// * @author 王永吉
// * @date 2020-01-14
// * <p>
// * 通过 实体类 操作数据库
// * <p>
// * 通过 实体类 操作数据库
// * <p>
// * 通过 实体类 操作数据库
// */
//@Slf4j
//@RestController
//@RequestMapping("/entity")
//public class HaveEntityController {
//    @Autowired
//    private MiDao miDao;
//
//    /**
//     * 插入操作
//     */
//    @RequestMapping("/insert")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> insertOne(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        long delete = miDao.delete(new MiWrapper<>(Demo.class).ne(Demo.ID, 0));
//
//        //==============数据库自增ID--单条插入--insert==================
//        Demo demo1 = new Demo();
//        demo1.setName("1");
//        long insert1 = miDao.insert(demo1);
//        System.out.println(demo1.jsonStr());
//
//
//        //==============手动设置ID--单条插入--insert==================
//        Demo demo2 = new Demo();
//        demo2.setId("2");
//        demo2.setName("2");
//        long insert2 = miDao.insert(demo2);
//        System.out.println(demo2.jsonStr());
//
//
//        //==============根据ID判断 插入/修改 --insertOrUpdate==================
//        Demo demo3 = new Demo();
//        demo3.setId("3");
//        demo3.setName("不存在--执行插入操作3");
//        long insert3 = miDao.insertOrUpdate(demo3);
//        System.out.println(demo3.jsonStr());
//
//        Demo demo4 = new Demo();
//        demo4.setId("2");
//        demo4.setName("存在--执行修改操作2");
//        long insert4 = miDao.insertOrUpdate(demo4);
//        System.out.println(demo4.jsonStr());
//
//
//        //==============批量插入--数据库自增ID--insertBatch==================
//        List<Demo> arrayList = new ArrayList<>();
//        for (int i = 10; i < 16; i++) {
//            Demo add = new Demo();
//            add.setName(i + "");
//            add.setCreateTime(LocalDateTime.now());
//            arrayList.add(add);
//        }
//        long l = miDao.insertBatch(arrayList);
//        System.out.println(JSON.toJSONString(arrayList));
//
//
//        //==============批量插入--手动设置ID--insertBatch==================
//        List<Demo> arrayList2 = new ArrayList<>();
//        for (int i = 20; i < 26; i++) {
//            Demo add = new Demo();
//            add.setId(i + "");
//            add.setName(i + "");
//            add.setCreateTime(LocalDateTime.now());
//            arrayList2.add(add);
//        }
//        long l1 = miDao.insertBatch(arrayList2);
//        System.out.println(JSON.toJSONString(arrayList2));
//
//
//        //==============批量插入根据ID判断 插入/修改--insertOrUpdateBatch==================
//        //修改
//        long l2 = miDao.insertOrUpdateBatch(arrayList2);
//        //插入
//        List<Demo> arrayList3 = new ArrayList<>();
//        for (int i = 30; i < 36; i++) {
//            Demo add = new Demo();
//            add.setId(i + "");
//            add.setName(i + "");
//            add.setCreateTime(LocalDateTime.now());
//            arrayList3.add(add);
//        }
//        long l3 = miDao.insertOrUpdateBatch(arrayList3);
//        System.out.println(JSON.toJSONString(arrayList3));
//
//
//        //操作完成
//        log.info("end");
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 删除操作
//     */
//    @RequestMapping("/delete")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> delete(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//
//        //==============删除--deleteById==================
//        long l1 = miDao.deleteById(Demo.class, 90);
//
//
//        //==============删除--deleteByIds==================
//        long l2 = miDao.deleteByIds(Demo.class, Arrays.asList(8, 9, 10));
//
//
//        //==============删除--条件构造器--delete==================
//        MiWrapper<Demo> wrapper = new MiWrapper<>(Demo.class);
//        wrapper.eq(Demo.ID, 60);
//        wrapper.or();
//        wrapper.in(Demo.ID, Arrays.asList(1, 2, 3, 4, 5));
//        long delete1 = miDao.delete(wrapper);
//
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 修改
//     */
//    @RequestMapping("/update")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> update(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//
//        //==============修改数据--updateById==================
//        Demo demo = new Demo();
//        demo.setId("10");
//        demo.setName("我第10名");
//        long update = miDao.updateById(demo);
//
//
//        //==============修改数据--纯粹条件构造器==================
//        MiWrapper<Demo> wrapper = new MiWrapper<>(Demo.class);
//        wrapper.sqlSet("name", "我是第20名,但是我的ID是1万");
//        wrapper.sqlSet("id=10000");
//        wrapper.eq(Demo.ID, 20);
//        long update1 = miDao.update(wrapper);
//
//
//        //==============修改数据--条件构造器==================
//        Demo demo2 = new Demo();
//        demo2.setName("我是30-33名");
//        MiWrapper<Demo> wrapper2 = new MiWrapper<>(Demo.class);
//        wrapper2.in(Demo.ID, Arrays.asList(30, 31, 32, 33));
//        long update2 = miDao.update(demo2, wrapper2);
//
//
//        //==============批量修改--updateByIds==================
//        Demo demo9 = new Demo();
//        demo9.setName("ids批量修改");
//        long l2 = miDao.updateByIds(demo9, Arrays.asList(55, 56, 57));
//
//
//        //==============批量修改--updateById==================
//        List<Demo> listUpdate = new ArrayList<>();
//        for (int i = 80; i < 100; i++) {
//            Demo demoNew = new Demo();
//            demoNew.setId(i + "");
//            demoNew.setName("我是批量修改 " + i + "");
//            demoNew.setCreateTime(LocalDateTime.now().plusDays(10));
//            listUpdate.add(demoNew);
//        }
//        long l3 = miDao.updateBatchById(listUpdate);
//
//        map = new HashMap<>();
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 统计
//     */
//    @RequestMapping("/count")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> count(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//
//        //==============统计--count==================
//        MiWrapper<Demo> wrapper = new MiWrapper<>(Demo.class);
//        wrapper.eq(Demo.ID, 10);
//        long count = miDao.count(wrapper);
//
//
//        //==============统计--count==================
//        long count1 = miDao.count(Demo.NAME, wrapper);//count(列) 存在null查不到的情况
//
//
//        map = new HashMap<>();
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 查询
//     */
//    @RequestMapping("/select")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> select(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//
//        //==============查询一条数据-----任意类型数据返回---纯粹字符串操作==================
//        ///1.查询所有字段
//        Map map1 = miDao.selectOne("select * from 0_demo");
//        JSONObject jsonObject = miDao.selectOne("select * from 0_demo", JSONObject.class);
//        ///2.查询指定字段
//        Map map2 = miDao.selectOne("select id,name from 0_demo");
//        JSONObject jsonObject1 = miDao.selectOne("select id,name from 0_demo", JSONObject.class);
//
//
//        //==============查询一条数据-----任意类型数据返回---实体类参与==================
//        ///1.查询所有字段
//        Map map3 = miDao.selectById(Demo.TABLE_NAME, 10);
//        Demo demo = miDao.selectById(Demo.TABLE_NAME, 10, Demo.class);
//        ///2.查询指定字段
//        Map map4 = miDao.selectById(Demo.TABLE_NAME, "id,name", 10);
//        Demo demo1 = miDao.selectById(Demo.TABLE_NAME, "id,name", 10, Demo.class);
//
//
//        //==============查询一条数据-----任意类型数据返回---使用条件构造器==================
//        ///1.查询所有字段
//        MiWrapper<Demo> wrapper1 = new MiWrapper<>(Demo.class);
//        wrapper1.eq(Demo.ID, 10);
//        wrapper1.eq(Demo.NAME, 10);
//        Demo demo2 = miDao.selectOne(wrapper1);
//        ///1.查询所有字段
//        MiWrapper<JSONObject> wrapper2 = new MiWrapper<>(Demo.TABLE_NAME);
//        wrapper2.eq(Demo.ID, 10);
//        wrapper2.eq(Demo.NAME, 10);
//        JSONObject jsonObject2 = miDao.selectOne(wrapper2);
//        ///2.查询指定字段
//        MiWrapper<Demo> wrapper3 = new MiWrapper<>(Demo.class);
//        wrapper3.select("id,name,logo_url");
//        wrapper3.eq(Demo.ID, 10);
//        Demo demo3 = miDao.selectOne(wrapper3);
//        ///2.查询指定字段
//        MiWrapper<JSONObject> wrapper4 = new MiWrapper<>(Demo.TABLE_NAME);
//        wrapper4.select("id,name,logo_url");
//        wrapper4.eq(Demo.ID, 10);
//        JSONObject jsonObject3 = miDao.selectOne(wrapper4);
//
//
//        //==============查询List-----任意类型数据返回---纯粹字符串操作==================
//        ///1.查询所有字段
//        List<Map<String, Object>> maps = miDao.selectList("select * from 0_demo");
//        List<JSONObject> jsonObjects = miDao.selectList("select * from 0_demo", JSONObject.class);
//        ///2.查询指定字段
//        List<Map<?, ?>> maps1 = miDao.selectList("select id,name from 0_demo");
//        List<JSONObject> jsonObjects1 = miDao.selectList("select id,name from 0_demo", JSONObject.class);
//
//
//        //==============查询List-----任意类型数据返回---实体类参与==================
//        ///1.查询所有字段
//        List<Map> maps2 = miDao.selectByIds(Demo.TABLE_NAME, Arrays.asList(1, 2, 3));
//        List<JSONObject> jsonObjects2 = miDao.selectByIds(Demo.TABLE_NAME, Arrays.asList(1, 2, 3), JSONObject.class);
//        ///2.查询指定字段
//        List<Map> maps3 = miDao.selectByIds(Demo.TABLE_NAME, "id,name", Arrays.asList(1, 2, 3));
//        List<JSONObject> jsonObjects3 = miDao.selectByIds(Demo.TABLE_NAME, "id,name", Arrays.asList(1, 2, 3), JSONObject.class);
//
//
//        //==============查询List-----任意类型数据返回---使用条件构造器==================
//        ///1.查询所有字段
//        MiWrapper<Demo> wrapper10 = new MiWrapper<>(Demo.class);
//        wrapper10.ne(Demo.ID, 10);
//        wrapper10.ne(Demo.NAME, 10);
//        List<Demo> demos = miDao.selectList(wrapper10);
//        ///1.查询所有字段
//        MiWrapper<JSONObject> wrapper11 = new MiWrapper<>(Demo.TABLE_NAME);
//        wrapper11.ne(Demo.ID, 10);
//        wrapper11.ne(Demo.NAME, 10);
//        List<JSONObject> jsonObjects4 = miDao.selectList(wrapper11);
//        ///2.查询指定字段
//        MiWrapper<Demo> wrapper12 = new MiWrapper<>(Demo.class);
//        wrapper12.select("id,name,logo_url");
//        wrapper12.in(Demo.ID, 1, 2, 3, 4, 5, 6, 7, 8, 9);
//        wrapper12.ne(Demo.ID, 10);
//        List<Demo> demos1 = miDao.selectList(wrapper12);
//        ///2.查询指定字段
//        MiWrapper<JSONObject> wrapper13 = new MiWrapper<>(Demo.TABLE_NAME);
//        wrapper13.select("id,name,logo_url");
//        wrapper13.in(Demo.ID, 1, 2, 3, 4, 5, 6, 7, 8, 9);
//        wrapper3.limit(5);
//        List<JSONObject> jsonObjects5 = miDao.selectList(wrapper13);
//
//
//        map = new HashMap<>();
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 查询分页
//     */
//    @RequestMapping("/page")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> page(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//
//        //查询所有字段
//        MiPage<Map<?, ?>> page = miDao.page(new MiPage<>(1, 10), "select * from 0_demo where id != 1");
//        //查询所有字段
//        MiWrapper<Demo> wrapper = new MiWrapper<>(Demo.class);
//        wrapper.eq("id", 1);
//        MiPage<Demo> page2 = miDao.page(new MiPage<>(1, 10), wrapper);
//        MiPage<Demo> page3 = miDao.page(new MiPage<>(map), wrapper);
//
//
//        //查询指定字段
//        MiPage<Map<?, ?>> page1 = miDao.page(new MiPage<>(1, 10), "select id,name from 0_demo where id > 1");
//        //查询指定字段
//        MiWrapper<Demo> wrapper2 = new MiWrapper<>(Demo.class);
//        wrapper2.select("id", "name");
//        wrapper2.in("id", 1, 2, 3, 4, 5, 6, 7, 8, 9);
//        MiPage<Demo> page4 = miDao.page(new MiPage<>(1, 10), wrapper2);
//        MiPage<Demo> page5 = miDao.page(new MiPage<>(map), wrapper2);
//
//
//        map = new HashMap<>();
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    /**
//     * 多表联查
//     * 不用构造器也可以纯手写字符串-道理是一样的
//     */
//    @RequestMapping("/join")
//    @Transactional(rollbackFor = Exception.class)
//    public Map<Object, Object> join(@RequestBody Map<Object, Object> map) {
//        //==============初始化数据==================
//        initData();
//
//        //==============三表联查 拼装 join条件==================
//        //============== 根据0_demo表的Id,联查0_file表的name ：fileName ==================
//        //============== 根据0_demo表的Id,联查0_user表的name ：userName ==================
//        //============== 根据0_demo表的Id,联查0_type表的name ：typeName ==================
//        //============== 不用构造器也可以纯手写字符串---道理是一样的 ==================
//        //获取左联-条件构造器
//        MiWrapper<Demo> wrapper_left = getMiWrapper(1);
//        String wrapper_left_sql_string =
//                "select de.* ,file.name as fileName ,user.name as userName ,type.name as typeName" +
//                        " from 0_demo de " +
//                        " left join 0_file file on file.id = de.id " +
//                        " left join 0_user user on user.id = de.id " +
//                        " left join 0_type type on type.id = de.id " +
//                        " where  de.id in (1,2,3,4,5,6,7,8)  and de.id !=999 and de.name !='999'";
//
//        //获取右联-条件构造器
//        MiWrapper<Demo> wrapper_right = getMiWrapper(2);
//        String wrapper_right_sql_string =
//                "select de.* ,file.name as fileName ,user.name as userName ,type.name as typeName" +
//                        " from 0_demo de " +
//                        " right join 0_file file on file.id = de.id " +
//                        " right join 0_user user on user.id = de.id " +
//                        " right join 0_type type on type.id = de.id " +
//                        " where de.id in (1,2,3,4,5,6,7,8)  and de.id !=999 and de.name !='999'";
//
//        //获取全联-条件构造器
//        MiWrapper<Demo> wrapper_join = getMiWrapper(3);
//        String wrapper_join_sql_string =
//                "select de.* ,file.name as fileName ,user.name as userName ,type.name as typeName" +
//                        " from 0_demo de " +
//                        " join 0_file file on file.id = de.id " +
//                        " join 0_user user on user.id = de.id " +
//                        " join 0_type type on type.id = de.id " +
//                        " where de.id in (1,2,3,4,5,6,7,8)  and de.id !=999 and de.name !='999'";
//
//
//        //联查统计
//        long count = miDao.count(wrapper_left);
//        long count1 = miDao.count(wrapper_right);
//        long count2 = miDao.count(wrapper_join);
//
//
//        //联查一条数据
//        Demo demo = miDao.selectOne(wrapper_left);
//        Demo demo1 = miDao.selectOne(wrapper_right);
//        Demo demo2 = miDao.selectOne(wrapper_join);
//        Map map1 = miDao.selectOne(wrapper_left_sql_string);
//        Map map2 = miDao.selectOne(wrapper_right_sql_string);
//        Map map3 = miDao.selectOne(wrapper_join_sql_string);
//
//
//        //联查一条集合数据
//        List<Demo> demos = miDao.selectList(wrapper_left);
//        List<Demo> demos1 = miDao.selectList(wrapper_right);
//        List<Demo> demos2 = miDao.selectList(wrapper_join);
//        List<Map<?, ?>> maps = miDao.selectList(wrapper_left_sql_string);
//        List<Map<?, ?>> maps1 = miDao.selectList(wrapper_right_sql_string);
//        List<Map<?, ?>> maps2 = miDao.selectList(wrapper_join_sql_string);
//
//
//        //联查分页数据
//        MiPage<Demo> page = miDao.page(new MiPage<>(1, 10), wrapper_left);
//        MiPage<Demo> page1 = miDao.page(new MiPage<>(1, 10), wrapper_right);
//        MiPage<Demo> page2 = miDao.page(new MiPage<>(1, 10), wrapper_join);
//        MiPage<Map<?, ?>> page3 = miDao.page(new MiPage<>(1, 10), wrapper_left_sql_string);
//        MiPage<Map<?, ?>> page4 = miDao.page(new MiPage<>(1, 10), wrapper_right_sql_string);
//        MiPage<Map<?, ?>> page5 = miDao.page(new MiPage<>(1, 10), wrapper_join_sql_string);
//
//
//        map = new HashMap<>();
//        map.put("操作完成", "true");
//        return map;
//    }
//
//    private MiWrapper<Demo> getMiWrapper(int type) {
//        MiWrapper<Demo> wrapper = new MiWrapper<>(Demo.class);
//        wrapper.setTableName("0_demo de");
//        wrapper.select("de.*", "file.name as fileName", "user.name as userName", "type.name as typeName");
//
//        //        构造左联条件
//        if (type == 1) {
//            wrapper.leftJoin("0_file file", "file.id = de.id");
//            wrapper.leftJoin("0_user user", "user.id = de.id");
//            wrapper.leftJoin("0_type type", "type.id = de.id");
//        }
//
//        //        构造右联条件
//        if (type == 2) {
//            wrapper.rightJoin("0_file file", "file.id = de.id");
//            wrapper.rightJoin("0_user user", "user.id = de.id");
//            wrapper.rightJoin("0_type type", "type.id = de.id");
//        }
//
//        //        构造全联条件
//        if (type == 3) {
//            wrapper.join("0_file file", "file.id = de.id");
//            wrapper.join("0_user user", "user.id = de.id");
//            wrapper.join("0_type type", "type.id = de.id");
//        }
//
//        //查询条件
//        wrapper.in("de.id", 1, 2, 3, 4, 5, 6, 7, 8, 9); //id in （）
//        wrapper.ne("de.id", 999);// id !=999
//        wrapper.ne("de.name", 999);// name !='999'
//
//        return wrapper;
//    }
//
//
//    private void initData() {
//        log.info("start");
//
//        long delete = miDao.delete(new MiWrapper<>(Demo.class).ne(Demo.ID, 0));
//        List<Demo> arrayList1 = new ArrayList<>();
//        for (int i = 1; i < 5000; i++) {
//            Demo demo = new Demo();
//            demo.setId(i + "");
//            demo.setName(i + "");
//            demo.setCreateTime(LocalDateTime.now());
//            arrayList1.add(demo);
//        }
//        long l = miDao.insertBatch(arrayList1, 1000);
//    }
//
//}
